gusucode.com > 阵列信号处理书的源码 > MATALB 程序/12. 宽带信号DOA估计的非相干信号子空间(ISM)MATLAB程序/ISM_code.m

    %宽带信号DOA估计算法:非相干信号子空间(ISM)算法 
% Developed by xiaofei zhang (南京航空航天大学 电子工程系 张小飞)
% EMAIL:zhangxiaofei@nuaa.edu.cn


clc 
clear all 
close all 
M=12;                                      %阵元数 
N=200;                                    %快拍数 
ts=0.01;                                  %时域采样间隔 
f0=100;                                   %入射信号中心频率  
f1=80;                                    %入射信号最低频率 
f2=120;                                   %入射信号最高频率 
c=1500;                                   %声速 
lambda=c/f0;                              %波长 
d=lambda/2;                               %阵元间距 
SNR=15;                                   %信噪比 
b=pi/180;   
theat1=30*b;                               %入射信号波束角1 
theat2=0*b;                                %入射信号波束角2 
n=ts:ts:N*ts;                             
theat=[theat1 theat2]'; 
 
%%%%%%%%%%%%%%%% produce signal %%%%%%%%%%%%%%%% 
 
s1=chirp(n,80,1,120);                     %生成线性调频信号1; 
sa=fft(s1,2048);                          %进行FFT变换 
%figure, %specgram(s1,256,1E3,256,250);   %频谱图
s2=chirp(n+0.100,80,1,120);                %生成线性调频信号2 
sb=fft(s2,2048);                           %进行FFT变换 
  
% %%%%%%%%%%%%%%%%%%%%% ISM算法 %%%%%%%%%%%%%%%%%% 
P=1:2; 
a=zeros(M,2); 
sump=zeros(1,181); 
for i=1:N
    f=80+(i-1)*1.0; 
    s=[sa(i) sb(i)]'; 
    for m=1:M 
        a(m,P)=exp(-j*2*pi*f*d/c*sin(theat(P))*(m-1))'; 
    end 
    R=a*(s*s')*a'; 
    [em,zm]=eig(R); 
    [zm1,pos1]=max(zm); 
    for l=1:2 
        [zm2,pos2]=max(zm1); 
        zm1(:,pos2)=[]; 
        em(:,pos2)=[]; 
    end 
    k=1; 
    for ii=-90:1:90 
        arfa=sin(ii*b)*d/c; 
        for iii=1:M 
            tao(1,iii)=(iii-1)*arfa; 
        end 
        A=[exp(-j*2*pi*f*tao)]'; 
        p(k)=A'*em*em'*A; 
        k=k+1; 
    end 
    sump=sump+abs(p); 
end 
pmusic=1/33*sump; 
pm=1./pmusic; 
thetaesti=-90:1:90; 
plot(thetaesti,20*log(abs(pm))); 
xlabel('入射角/度'); 
ylabel('空间谱/dB'); 
grid on